package com.song.springcloud.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import com.song.myrule.SongRandomRule;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;


@Configuration   // 相当于 spring applicationContext.xml
public class ConfigBean {

    /*
        注册一个 RestTemplate Bean

        @LoadBalanced 开启负载均衡，核心实现接口：IRule
        如果想自己写负载均衡规则，说白了就是去重写接口的方法，然后指定下当前使用的规则即可
            public interface IRule {
                Server choose(Object var1);   // 选择

                // 默认轮询
                void setLoadBalancer(ILoadBalancer var1);     // 设置负载均衡策略

                ILoadBalancer getLoadBalancer();
            }

    */
    @Bean
    @LoadBalanced  //使用Ribbon负载均衡  进程式负载均衡，又消费方决定访问谁
    public RestTemplate getRestTemplate(){
        return new RestTemplate();  // 默认轮询
    }

    // 修改负载均衡策略为随机的
    @Bean
    public IRule myRule(){
        //return new RandomRule(); // 随机
        return new SongRandomRule(); // 宋大米自定义的规则
    }

}
